use solutiont9::is_prime;

/// 递推公式
pub fn min_edge_prime_num(number: u32) -> String {
    let mut prime_count = 0;
    let mut diagonal_count = 1;
    let mut v = 1;
    for n in 1_u128.. {
        let k = 2 * ((n + 3) / 4);
        v += k;
        if is_prime(v as u64) {
            prime_count += 1;
        }
        if n % 4 == 0 {
            diagonal_count += 4;
            if prime_count * 100 / diagonal_count < number {
                println!("{v}");
                return format!("{},{prime_count}", (diagonal_count + 1) / 2);
            }
        }
    }
    String::new()
}

// /// 通项公式
// pub fn min_edge_prime_num(number: u32) -> String {
//     if number == 1 { return "1,0".to_string() }
//     let mut prime_count = 0;
//     let mut diagonal_count = 1;
//     for n in 1_i128.. {
//         let k = (n + 3) / 4;
//         let v = 1 + 2 * k * (n - 2 * k + 2);
//         if is_prime(v as u64) {
//             prime_count += 1;
//         }
//         if n % 4 == 0 {
//             diagonal_count += 4;
//             if prime_count * 100 / diagonal_count < number {
//                 println!("{} {}", prime_count * 100 / diagonal_count, number);
//                 return format!("{},{prime_count}", (diagonal_count + 1) / 2);
//             }
//         }
//     }
//     String::new()
// }

// fn is_prime(n: i128) -> bool {
//     if n <= 1 {
//         return false;
//     }
//     if n <= 3 {
//         return true;
//     }
//     if n % 3 == 0 {
//         return false;
//     }
//     let mut i = 5;
//     while i * i <= n {
//         if n % i == 0 || n % (i + 2) == 0 {
//             return false;
//         }
//         i += 6;
//     }
//     true
// }
